iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
自我挑戰組

自我挑戰Ruby系列 第 28

Day 28 - 特性

  • 分享至 

  • xImage
  •  

開放類別

主要指的是兩個相同類別的東西會融合,

並不會覆蓋掉。像之前的例子:

class Card
  def rent_court(sport)
    puts "租#{sport}" 
  end
end

class Card
  def use
     puts "使用泳池"
  end
end

如果我們分別想成兩個類別的東西,

他們即會融合在一起,像之前一樣指定變數後,

就都可以使用rent_court方法以及use方法。

封裝性

之前提過物件導向程式設計語言的特性的封裝性:

  • public
  • private
  • protected

以下表達這三種方法的使用:

class Card

  def rent_court(sport)
    puts "租#{sport}" 
  end

  protected
  def use
     puts "使用泳池"
  end

  private
  def rock_climbing
     puts "使用攀岩"
  end

end

rent_court 方法是public,

use方法是protected,rock_climbing方法是private。

除了上面方式,也可以寫成:

class Card

  def rent_court(sport)
    puts "租#{sport}" 
  end

  def use
     puts "使用泳池"
  end

  def rock_climbing
     puts "使用攀岩"
  end

  protected :use
  private :rock_climbing

end

當藉由指定變數以及使用方法時:

arance = Card.new
arance.rent_court "羽球場"

會回傳租羽球場。

arance.use
arance.rock_climbing

使用protected和private的方法,

都會回傳NoMethodError

在這其實無法明確的指出 receiver是誰。

其實只要藉由send就可以得到想要的結果:

arance.send(:use)
arance.send(:rock_climbing)

就會得到使用泳池、使用攀岩的結果。


上一篇
Day 27 - 類別與實體2
下一篇
Day 29 - 模組
系列文
自我挑戰Ruby30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言